使用docker部署TensorFlow Serving

GitHub dockerfile

Dockerfile

FROM ubuntu:16.04

MAINTAINER Jeremiah Harmsen <jeremiah@google.com>

ADD sources.list /etc/apt/sources.list

RUN apt-get clean && \
    apt-get update && apt-get install -y \
        build-essential \
        curl \
        git \
        libfreetype6-dev \
        libpng12-dev \
        libzmq3-dev \
        mlocate \
        pkg-config \
        python-dev \
        python-numpy \
        python-pip \
        software-properties-common \
        swig \
        zip \
        zlib1g-dev \
        libcurl3-dev \
        openjdk-8-jdk\
        openjdk-8-jre-headless \
        wget \
        && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# Set up grpc

RUN pip install mock grpcio

# Set up Bazel. 使用apt-get安装, 不需要Bazel, 具体自行修改

ENV BAZELRC /root/.bazelrc
# Install the most recent bazel release.
ENV BAZEL_VERSION 0.5.1
WORKDIR /
RUN echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | tee /etc/apt/sources.list.d/tensorflow-serving.list && \
    curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | apt-key add - && \
    apt-get update && apt-get install tensorflow-model-server

# 程序没有使用, 不需要安装tensorflow-serving-api
RUN pip install tensorflow-serving-api

COPY boot.sh /usr/local/boot.sh
# 没有如下脚本, 则自行删除
COPY start.sh /usr/local/start.sh
COPY stop.sh /usr/local/stop.sh

RUN chmod +x /usr/local/boot.sh /usr/local/start.sh /usr/local/stop.sh

ENTRYPOINT ["/usr/local/boot.sh"]

163源

sources.list

deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

boot.sh

该脚本可以写入tensorflow_model_server启动命令, 启动容器的时候将model映射到容器内.

如果不启动守护进程, 又不想容器退出, 可以使用死循环或者tail避免容器退出.

#!/bin/bash
while true
  do sleep 100 ;
done

# tail -f /dev/null
觉得添加脚本麻烦, 可以使用如下命令
docker run -d boxfish/tensorflow-serving-devel:1.0 /bin/bash -c "while true;do sleep 100; done"

docker镜像构建命令

docker build --pull -t $USER/tensorflow-serving-devel:1.0 -f Dockerfile.devel .

导出镜像

docker save -o tensorflow-serving-devel.tar boxfish/tensorflow-serving-devel

导入镜像

docker load -i tensorflow-serving-devel.tar